package com.odontosis.view.servico.cadastro.paciente;


import java.util.ArrayList;
import java.util.Collection;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.odontosis.acesso.filtro.PermissaoAcesso;
import com.odontosis.entidade.GrupoUsuario;
import com.odontosis.entidade.Paciente;
import com.odontosis.entidade.Usuario;
import com.odontosis.ioc.ContainerIoc;
import com.odontosis.service.PacienteService;
import com.odontosis.util.StringUtilsOdontosis;
import com.odontosis.view.OdontosisAction;
import com.odontosis.view.cadastro.paciente.FormInclusaoPacientes;

public class AcaoInclusaoPaciente extends
		OdontosisAction<PacienteService> {
	
	private Paciente paciente;
  
	public ActionForward onIniciarTela(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		FormInclusaoPacientes formulario = (FormInclusaoPacientes) form;
		if(formulario.getId() != null){
			paciente = service.load(new Long(formulario.getId()));
			formulario.transferirParaForm(formulario, paciente);
		}else{
			paciente = new Paciente();
			formulario.setVirNoRelatorio(true);
			formulario.setVirNoRelatorioOld(true);
		}
		GrupoUsuario grupoUsuario = PermissaoAcesso.getGrupoUsuarioLogado(request);
		if(grupoUsuario == GrupoUsuario.ADMIN) {
			formulario.setAdm(true);
		} else {
			formulario.setAdm(false);
		}
		return mapping.getInputForward();
	}
	
	public ActionForward onSalvarPaciente(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		FormInclusaoPacientes formulario = (FormInclusaoPacientes) form;
		if(paciente == null){
			paciente = new Paciente();
		}
		
		String nPasta = formulario.getNumeroPasta();
		formulario.transferirParaBOs(formulario, paciente);
		if(paciente.getId() != null && paciente.getId().longValue() == 0){
			paciente.setId(null);
		}
		paciente.setNumeroPasta(nPasta);
		
		if(StringUtilsOdontosis.isVazia(paciente.getNumeroPasta()) && !StringUtilsOdontosis.isVazia(paciente.getIpsm())){
			paciente.setNumeroPasta(service.retornarProximoNumeroPasta().toString());
		}
		
		resetarPropriedadesVazias(paciente);
		
		ContainerIoc.getPacienteService().saveOrUpdate(paciente);
		Collection<String> sucesso = new ArrayList<String>();
		sucesso.add("Registro Atualizado Com Sucesso");
		request.setAttribute("sucesso", sucesso);
		request.setAttribute("mensagens", null);
		return mapping.findForward("lista");
	}
	
	
	private void resetarPropriedadesVazias(Paciente paciente){
		if(StringUtilsOdontosis.isVazia(paciente.getNumeroPasta())){
			paciente.setNumeroPasta(null);
		}
	}
	
	
	
	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		FormInclusaoPacientes formulario = (FormInclusaoPacientes) form;
//		List<String> colecaoErros = new ArrayList<String>();
//		colecaoErros.add("paciente.nul");
//		request.getSession().setAttribute("colecaoErros", colecaoErros);
		if(StringUtils.isEmpty(formulario.getMetodo()))
		{
			return onIniciarTela(mapping, form, request, response);
		}
		return onSalvarPaciente(mapping, form, request, response);
	}
	
}
